#include<iostream>
#define rg register
using namespace std;
long long read() {//快速读入
    long long x = 0, f = 1;
    char c = getchar();
    while (c < '0' || c>'9') f = (c == '-') ? -1 : 1, c = getchar();
    while (c >= '0' && c <= '9') x = x * 10 + c - 48, c = getchar();
    return f * x;
}
void exgcd(long long a, long long b, long long& x, long long& y) {//a是Mi也就是M/mi,b是mi,x和y是贝祖等式的x和y需要求出来
    if (!b) { x = 1, y = 0; return; }//如果得到最大公约数就返回
    exgcd(b, a % b, x, y);//扩展欧几里得解除x，y
    long long t = x;
    x = y, y = t - (a / b) * y;//扩展欧几里得公式
}
long long n, x, y, a[11], p[11];//a数组是余数，p数组是除数
void crt() {
    long long ans = 1, js = 0;
    for (long long i = 1; i <= n; i++)
        ans *= p[i];//因为质数，所以乘积为最大公约数
    for (long long i = 1; i <= n; i++) {
        long long t = ans / p[i];//M/mi
        exgcd(t, p[i], x, y);//扩展欧几里得求得ti
        cout << a[i] * t % ans * x % ans << "\n";
        js += a[i] * t % ans * x % ans;//ai*ti*mi,%ans，是防止拆出来的数的绝对值比原来的大，达不到拆解的目的
        js %= ans;
    }
    printf("%lld", (js + ans) % ans);//最后的和%M,最大公约数
}
void init() {
    n = read();
    for (long long i = 1; i <= n; i++)
        p[i] = read(), a[i] = read();//读取同余方程组的除数和余数
}
int main(){
    init();
    crt();
    //cout << "验证结果 4527%7    4527%12   4527%55 " << "  " << 4527 % 7 << "  " << 4527 % 12 << "   " << 4527 % 55;
    return 0;
}
/*
*
孙子定理，又称之为中国剩余定理（Chinese Remainder Theorem, CRT）
可以求解如下形式的一元线性同余方程组（其中n1,n2,…,nk两两互质）。
计算所有模数的积n；(它们的最小公倍数)
对于第i个方程：
计算mi=n/ni;
计算mi在模ni意义下的逆元mi^-1；也就是ti
方程组的唯一解为：a=ai*ti*mi的和(modn)。


*/